package com.zys.http.processor.basic;

import com.intellij.psi.PsiElement;
import com.zys.http.entity.param.ParamProperty;
import com.zys.http.ui.tree.node.MethodNode;
import org.jetbrains.annotations.NotNull;

import java.util.List;
import java.util.Map;

/**
 * @author zys
 * @since 2025-01-13
 */
public interface MethodProcessor {
    /**
     * @param element PsiMethod or KtNamedFunction
     * @return 符合条件的方法, 如有 spring 请求注解的方法
     */
    boolean isTargetMethod(PsiElement element);

    /**
     * @param element PsiMethod or KtNamedFunction
     * @return 符合条件的方法上的请求路径
     */
    List<String> methodPaths(PsiElement element);

    /**
     * @param element PsiMethod or KtNamedFunction
     * @return 符合条件的方法上的 swagger 注解说明
     */
    String methodSwagger(PsiElement element);

    /**
     * @param element        PsiMethod or KtNamedFunction
     * @param contextPath    模块路径
     * @param controllerPath controller 路径
     * @param isFirstCall    是否第一次调用
     * @return 符合条件的方法上的 swagger 注解说明
     */
    List<MethodNode> methodNodeCreate(PsiElement element, String controllerPath, String contextPath, boolean isFirstCall);

    /**
     * @param element PsiMethod or KtNamedFunction
     * @return 符合条件的方法的参数
     */
    List<? extends PsiElement> methodParameters(PsiElement element);

    /**
     * 将方法参数转换成渲染模型
     *
     * @param element      PsiMethod/KtNameFunction
     * @param isJsonPretty 是否美化 json
     * @return /
     */
    Map<String, ParamProperty> methodParametersParse(@NotNull PsiElement element, boolean isJsonPretty);

}
